jQuery(function ($) {
	'use strict';

	/**
	 * Update date picker element
	 * Used for static & dynamic added elements (when clone)
	 */
	function updateAutocomplete(e) {
		var $this = $(this),
			$result = $this.next(),
			name = $this.data('name');

		// If the function is called on cloning, then change the field name and clear all results
		// @see clone.js
		if (e.hasOwnProperty('type') && 'clone' == e.type) {
			name = name.replace(/\[(\d+)\]/, function (match, p1) {
				return '[' + ( parseInt(p1, 10) + 1 ) + ']';
			});

			// Update the "data-name" attribute for further cloning
			$this.attr('data-name', name);

			// Clear all results
			$result.html('');
		}

		$this.removeClass('ui-autocomplete-input').attr('id', '')
			.autocomplete({
				minLength: 0,
				source   : $this.data('options'),
				select   : function (event, ui) {
					$result.append(
						'<div class="rwmb-autocomplete-result">' +
							'<div class="label">' + ui.item.label + '</div>' +
							'<div class="actions">' + RWMB_Autocomplete.delete + '</div>' +
							'<input type="hidden" class="rwmb-autocomplete-value" name="' + name + '" value="' + ui.item.value + '">' +
							'</div>'
					);

					// Reinitialize value
					this.value = '';

					return false;
				}
			});
	}

	$('.rwmb-autocomplete-wrapper input[type="text"]').each(updateAutocomplete);
	$('.rwmb-input').on('clone', ':input.rwmb-autocomplete', updateAutocomplete);

	// Handle remove action
	$(document).on('click', '.rwmb-autocomplete-result .actions', function () {
		// remove result
		$(this).parent().remove();
	});
});